jetcrab\bytecode\literals/
function.rs1use crate::ast::Node;
2use crate::vm::instructions::Instruction;
3
4pub trait FunctionLiteralGenerator {
5 fn generate_function_expression(&mut self, node: &Node);
6 fn generate_arrow_function_expression(&mut self, node: &Node);
7}
8
9pub trait FunctionLiteralCore {
10 fn instructions(&mut self) -> &mut Vec<Instruction>;
11 fn visit_node(&mut self, node: &Node);
12}
13
14impl<T> FunctionLiteralGenerator for T
15where
16 T: FunctionLiteralCore,
17{
18 fn generate_function_expression(&mut self, node: &Node) {
19 if let Node::FunctionExpression(expr) = node {
20 if let Some(id) = &expr.id {
21 self.visit_node(id);
22 }
23 for param in &expr.params {
24 self.visit_node(param);
25 }
26 self.visit_node(&expr.body);
27 }
28 }
29
30 fn generate_arrow_function_expression(&mut self, node: &Node) {
31 if let Node::ArrowFunctionExpression(expr) = node {
32 for param in &expr.params {
33 self.visit_node(param);
34 }
35 self.visit_node(&expr.body);
36 }
37 }
38}